//
//  UITextView+Extension.swift
//  weibo14
//
//  Created by mac on 16/3/16.
//  Copyright © 2016年 mac. All rights reserved.
//

import UIKit
extension UITextView{

    // 扩展一个方法 这个方法是传入表情模型 把模型里面对应的图片正确的添加到当前的文件加中
    func insertEmoticon(emoticon: YYEEmoticon) {
        // 代表是图片表情
        if emoticon.type == "0" {
            
            // 0. 取到textView现有文字的属性
            let originalAttr = NSMutableAttributedString(attributedString: self.attributedText)
            
            // 1. 通过表情模型里面的图片名转成表情图片
            let image = UIImage(named: "\(emoticon.folderName!)/\(emoticon.png!)", inBundle: YYEEmoticonTools.shareEmoticonTools.emoticonsBundle, compatibleWithTraitCollection: nil)
            
            // 2. 将图片添加到文字附件(NSTextAttachment)
            let textAttachment = YYETextAttachment()
            
            textAttachment.emoticon = emoticon
            
            textAttachment.image = image
            
            let imageWH = self.font!.lineHeight
            
            // 设置图片大小
            textAttachment.bounds = CGRectMake(0, -4, imageWH, imageWH)
            
            // 3. 将上一步的 NSTextAttachment文本附件 添加到 NSAttributedString 文本中
            
            let AttributedString = NSAttributedString(attachment: textAttachment)
            
            let attr = NSMutableAttributedString(attributedString: AttributedString)
            
            // 指定表情图片对应的属性文字的字体大小
            attr.addAttribute(NSFontAttributeName, value: self.font!, range: NSMakeRange(0, 1))

            
            
            // 4. 让textView显示 NSAttributedString
            // 取到光标
            var selectedRange = self.selectedRange

            // 把表情图片对应的attr添加到原来已经有的attr里面去
            // originalAttr.appendAttributedString(attr)
            // 不应该是添加 应该是替换
            originalAttr.replaceCharactersInRange(selectedRange, withAttributedString: attr)
            
            // 4. 让textView显示 NSAttributedString
            self.attributedText = originalAttr
            // 将location加1
            selectedRange.location++
            
            // 将选中的长度改成0,以便在用户选中某段字符的时候,输入表情之后还会选中一段字符
            selectedRange.length = 0
            self.selectedRange = selectedRange
            
            
        } else {
            // 是emoji
            self.insertText((emoticon.code! as NSString).emoji())
            return
        }
    
        // 发送文字改变通知
        NSNotificationCenter.defaultCenter().postNotificationName(UITextViewTextDidChangeNotification, object: self, userInfo: nil)

        // 调用代理方法
        self.delegate?.textViewDidChange?(self)

    }
    
    /// 输入框里面的表情对应的表情字符串的微博
    var emoticonText: String {
        get{
            var result = ""
            // 1. 遍历富文本
            self.attributedText.enumerateAttributesInRange(NSMakeRange(0, self.attributedText.length), options: []) { (userInfo, range, _) -> Void in
                // 1. 在表情上屏的时候,就给attachment设置一个表情模型
                // 如果里面有NSTextAttachment就代表是图片表情
                if let attachment = userInfo["NSAttachment"] as? YYETextAttachment {
                    let emoticon = attachment.emoticon
                    // 取到表情对应的描述字符串,拼接
                    result += emoticon!.chs!
                }else{
                    // 判断不是图片表情,是文字,就截取对应位置的文字
                    result += (self.attributedText.string as NSString).substringWithRange(range)
                }
            }
            return result
        }
    }

    
    
}






